00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef DERESOURCEMANAGER_HPP
00033 #define DERESOURCEMANAGER_HPP
00034
00035
00036
00037
00038
00039
00040 #include "deResource.hpp"
00041 #include "deHash.hpp"
00042 #include "deThread.hpp"
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 class deResourceManager : public IdeResourceManager
00053 {
00054 public:
00055 deResourceManager(void);
00056 ~deResourceManager(void);
00057
00058 long GetUniqueInterfaceID() { ++m_UniqueTypes; return m_UniqueTypes; }
00059 deBoolean RegisterResourceType(const char *extension, deResourceMakerCB maker);
00060 IdeResourceBase* GetResource(const char *filename, IdeFileSystem *filesystem, deBoolean DoLoad);
00061 IdeResourceBase* GetResourceThreaded(const char *filename, IdeFileSystem *filesystem, deBoolean DoLoad);
00062 IdeResourceBase* GetResourceFromFile(IdeFile* file, const char* filename, deBoolean record);
00063 IdeResourceBase* GetResourceFromFileThreaded(IdeFile* file, const char* filename, deBoolean record);
00064 deBoolean RemoveResource(IdeResourceBase * rsc);
00065 deBoolean RemoveAllResources(void);
00066
00067 private:
00068 deBoolean AddResource(char *extension, IdeResourceBase *ClassPtr);
00069 void ParseExtension(char *filename, char buffer[]);
00070 IdeFile* LoadFile(const char * filename, IdeFileSystem* BaseFS, deBoolean Read, deBoolean Write);
00071
00072 struct deResource
00073 {
00074 IdeResourceBase *ClassPtr;
00075 char extension[24];
00076 };
00077
00078 deTHashString <deResourceMakerCB> m_RegisteredTypes;
00079 deTHashString <deTHashString <deResource>*> m_Resources;
00080 long m_UniqueTypes;
00081
00082
00083 struct LoadingResource_t
00084 {
00085 deBoolean ready;
00086 deBoolean failed;
00087 IdeResourceBase* rsc;
00088 };
00089 struct LoadingResourceParams_t
00090 {
00091 deResourceManager* manager;
00092 deResourceMakerCB maker;
00093 IdeFile* loadfile;
00094 char filename[256];
00095 };
00096 IdeThreadLock* m_GlobalLockObj;
00097 IdeThreadLock* m_LoadLockObj;
00098 deTHashString <LoadingResource_t> m_LoadingResources;
00099 static u32 ThreadedLoadHandler(void* param);
00100 void ChangeThreadedResourceStatus(LoadingResourceParams_t* params, LoadingResource_t* rsc);
00101 };
00102
00103
00104 #endif // End DERESOURCEMANAGER_HPP
00105
00106